package common.model.Entity.libraryEntity.enums;

/**
 * 借阅记录状态枚举。
 *
 * <p>与数据库字段 {@code status} 整数代码显式映射，保证序列化/反序列化一致性。</p>
 */
public enum BorrowStatus {

    /**
     * 图书正在借出中
     */
    BORROWED(0),

    /**
     * 图书已归还
     */
    RETURNED(1),

    /**
     * 借阅已超期
     */
    OVERDUE(2);

    /**
     * 数据库中存储的整数代码。
     */
    private final int code;

    /**
     * 构造器
     *
     * @param code
     */
    BorrowStatus(int code) {
        this.code = code;
    }

    /**
     * 获取与该枚举常量关联的整数代码。
     *
     * @return 对应的整数代码，用于数据库存储。
     */
    public int getCode() {
        return code;
    }

    /**
     * 根据数据库整数值获取对应的 BorrowStatus 枚举
     * @param code 数据库中存储的整数值
     * @return 对应的 BorrowStatus 枚举，如果值无效则返回 null
     */
    public static BorrowStatus fromCode(int code) {
        return switch (code) {
            case 0 -> BORROWED;
            case 1 -> RETURNED;
            case 2 -> OVERDUE;
            default -> null;
        };
    }

    /**
     * 根据字符串获取对应的 BorrowStatus 枚举
     * @param value 字符串值
     * @return 对应的 BorrowStatus 若无匹配则返回 null
     */
    public static BorrowStatus fromString(String value) {
        if (value != null) {
            for (BorrowStatus status : BorrowStatus.values()) {
                if (status.name().equalsIgnoreCase(value)) {
                    return status;
                }
            }
        }
        return null;
    }
}